#include <graphics.h>	 // 引用 EasyX 图形库
#include <conio.h>
#pragma comment(lib,"Winmm.lib")
#define High 350  // 游戏画面尺寸
#define Width 600

// 全局变量
IMAGE img_bk, img_bird_1, img_bird_2, img_bar_up_1, img_bar_up_2, img_bar_down_1, img_bar_down_2;
int bird_x, bird_y;//小鸟位置
int bird_speed;//小鸟下落速度
int bar_speed;//柱子移动速度
int bar_up_x, bar_up_y;//柱子上半部分位置
int bar_down_x, bar_down_y;//柱子下半部分位置
void startup()  // 数据初始化        
{
	mciSendString("open E:\\background.mp3 alias bkmusic",NULL,0,NULL);
	mciSendString("play bkmusic repeat",NULL,0,NULL);
	initgraph(350, 600);	// 初始化350×600的画布
	loadimage(&img_bk, _T("E:\\background.jpg"));//读取背景图片位置
	loadimage(&img_bird_1, _T("E:\\bird1.jpg"));//读取小鸟图片位置
	loadimage(&img_bird_2, _T("E:\\bird2.jpg"));
	loadimage(&img_bar_up_1, _T("E:\\bar_up1.gif"));//读取柱子上半部分位置
	loadimage(&img_bar_up_2, _T("E:\\bar_up2.gif"));
	loadimage(&img_bar_down_1, _T("E:\\bar_down1.gif"));//读取柱子下半部分位置
	loadimage(&img_bar_down_2, _T("E:\\bar_down2.gif"));
	bird_x = 100, bird_y = 100;//小鸟初始位置
	bird_speed = 2;//小鸟初始速度
	bar_speed = 1;//柱子初始速度
	bar_up_x = 280, bar_up_y = -350;//柱子上半部分初始位置
	bar_down_x = bar_up_x, bar_down_y = bar_up_y+700;//柱子下半部分初始位置
	BeginBatchDraw();
}

void show()  // 显示画面
{
	putimage(0, 0, &img_bk);//在（0，0）位置生产image对象
	putimage(bird_x, bird_y, &img_bird_1, NOTSRCERASE);//在（100，200）位置组合显示小鸟
	putimage(bird_x, bird_y, &img_bird_2, SRCINVERT);
	putimage(bar_up_x, bar_up_y, &img_bar_up_1, NOTSRCERASE);//在（200，0）位置组合显示柱子上半部分
	putimage(bar_up_x, bar_up_y, &img_bar_up_2, SRCINVERT);
	putimage(bar_down_x, bar_down_y, &img_bar_down_1, NOTSRCERASE);//在（200，350）位置组合显示柱子下半部分
	putimage(bar_down_x, bar_down_y, &img_bar_down_2, SRCINVERT);
	FlushBatchDraw();
}

void updateWithoutInput()  // 与用户输入无关的更新
{
	if(bird_y<580)
	bird_y += bird_speed;
	if (bar_up_x > -70)
	{
		bar_up_x-= bar_speed;
		bar_down_x = bar_up_x;
	}
	if (bird_x + 34 > bar_up_x&&bird_x < bar_up_x + 70 && (bird_y<bar_up_y+600 || bird_y>bar_down_y))
	{
		bird_speed = 8;
		bar_speed = 0;
	}
	if (bar_up_x <= -70)
	{
		bar_up_x = 280;
		bar_down_x = bar_up_x;
		bar_up_y = -rand() % 400-50;
		bar_down_y = bar_up_y + 700;
	}
	Sleep(15);
}

void updateWithInput()  // 与用户输入有关的更新
{
	char input;
	if (kbhit())
	{
		input = getch();
		if (input == ' '&&bird_y > 20 && bird_speed == 2)
		{
			bird_y -= 30;
			mciSendString("close jpmusic",NULL,0,NULL);
			mciSendString("open E:\\Jump.mp3 alias jpmusic",NULL,0,NULL);
			mciSendString("play jpmusic",NULL,0,NULL);
					
		}
	}
}

void gameover()
{
	EndBatchDraw();
	closegraph();
}

int main()
{
	startup();  // 数据初始化	
	while (1)  //  游戏循环执行
	{
		cleardevice();//清屏函数
		updateWithoutInput();  // 与用户输入无关的更新
		updateWithInput();     // 与用户输入有关的更新
		show();  // 显示新画面
		if (bird_y >= 580)
			break;
	}
	gameover();     // 游戏结束、后续处理
	return 0;
}
